package com.example.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.TextView;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;

public class SocketClientActivity extends AppCompatActivity {

//声明文本视图 chatmessage，用于显示聊天记录
private TextView chatmessage = null;
//声明编辑框 sendmessage，用于用户输入短信内容
private EditText sendmessage = null;
    private static final String HOST = "192.168.0.104"; private static final int PORT = 29898;//服务器端口号
    private Socket socket = null;//声明套接字类，用于传输数据

    private BufferedReader bufferedReader = null; private PrintWriter printWriter = null;
    private String msg = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_socket_client);
//初始化组件
        chatmessage = (TextView) findViewById(R.id.chatmessage); sendmessage = (EditText) findViewById(R.id.sendmessage);

//创建线程，用于建立和服务器的连接，获得套接字对象
//建立连接后，构造接受输入流的 bufferedReader 对象和用于输出的 printWrite 对象
//由于建立和“远程”服务器的连接是一个无法保证即时完成的操作，故需要在线程中完成  new Thread() {
// 线程运行的代码
    ublic void run() { try {
//指定 IP 和端口号创建套接字
        socket = new Socket(HOST, PORT);
//使用套接字的输入流构造 BufferedReader 对象
        bufferedReader = new BufferedReader(
                new InputStreamReader(socket.getInputStream()));
//使用套接字的输出流构造 PrintWriter 对象
        printWriter = new PrintWriter(
                new BufferedWriter(
                        new OutputStreamWriter(socket.getOutputStream())), true);
    } catch (Exception e) { e.printStackTrace();
    }
        super.run();
    }
}.start();

        findViewById(R.id.sendbutton).setOnClickListener(new View.OnClickListener() {
@Override
    public void onClick(View view) {
        String message = sendmessage.getText().toString(); Log.d("TAG", "将发送 1：" + message);
////若套接字同服务器的链接存在且输出流也存在，则发送消息  if (socket != null && printWriter != null) {
        if (socket.isConnected()) {
        if (!socket.isOutputShutdown()) {
//将输入框的内容发送到服务器
    printWriter.println(message);
//刷新缓冲区,即将缓冲区中的数据立刻发送出云,同时清空缓冲区
    printWriter.flush();
//设置 chatmessage 的内容
        chatmessage.setText(chatmessage.getText().toString() + "\n" + "发送：" +

//清空 sendmessage 的内容，以便下次输入
        sendmessage.setText("");

        }
        }
        }
        }
        });

// 创建线程，接收从服务器信息
        new Thread() {
// 线程运行的代码
public void run() { while (true) {
//若套接字同服务器的链接存在且输入流也存在，则接收消息并显示聊天信息
if (socket != null && bufferedReader !=null) {
        if (socket.isConnected()) {
        if (!socket.isInputShutdown()) { try {
//输入缓冲区非空时，接收信息
        if ((msg = bufferedReader.readLine()) != null) { Log.i("TAG", msg);
        chatmessage.setText(chatmessage.getText().toString() + "\n" + "接收：" + msg);
        }
        } catch (Exception ex) { ex.printStackTrace();//显示异常信息
        }
        }
        }
        }
        }



        }

